package com.lihepeng.leecode.array;

import org.junit.Test;

import java.util.Arrays;

/**
 * 给定一个按非递减顺序排序的整数数组 A，返回每个数字的平方组成的新数组，要求也按非递减顺序排序。
 * 示例 1：
 * 输入：[-4,-1,0,3,10]
 * 输出：[0,1,9,16,100]
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/squares-of-a-sorted-array
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Solution977 {
    /**
     * 使用双指针进行排序
     * 从两头向中间进行推进
     *
     * @param A
     * @return
     */
    public int[] sortedSquares(int[] A) {
        int left = 0;
        int right = A.length - 1;
        int[] res = new int[A.length];
        int currentIndex = A.length - 1;
        while (left <= right) {
            if (A[left] * A[left] > A[right] * A[right]) {
                res[currentIndex--] = A[left] * A[left];
                left++;
            } else {
                res[currentIndex--] = A[right] * A[right];
                right--;
            }
        }
        return res;
    }

    @Test
    public void runTest() {
        int[] array = {-4, -1, 0, 3, 10};
        int[] ints = this.sortedSquares(array);
        System.out.println(Arrays.toString(ints));
    }
}
